package com.lry.consumer.consumer;

import org.apache.dubbo.common.URL;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.cluster.LoadBalance;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class IpLoadBalance implements LoadBalance {

    Map<String,Integer> map = new HashMap<>();
    {
        map.put("1101",20880);//台区1101调用端口为20880的提供者
        map.put("1102",20881);//台区1102调用端口为20881的提供者
    }

    /**
     *
     * @param invokers 若干提供者
     * @param url 注册中心资料
     * @param invocation 消费者调用的相关参数
     * @param <T>
     * @return
     * @throws RpcException
     */
    @Override
    public <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) throws RpcException {
       String ttuNum = (String) invocation.getArguments()[0];
       Integer mapPort = map.get(ttuNum);
       if(null==mapPort)
           return null;

        for (Invoker<T> invoker : invokers) {
            if (invoker.getUrl().getPort()==mapPort) {
                return invoker;
            }
        }
        return null;

    }
}